#ifndef COMPLEXCHROMOSOME_H_
#define COMPLEXCHROMOSOME_H_

#include <QList>

#include "Chromosome.h"

/**
  * @author Łukasz Szybka
  */
class ComplexChromosome : public Chromosome
{
public:
    /**
      * Constructor
      * @param size Lenght of chromosome
      */
    ComplexChromosome(int size = 0, QVariant min = 0, QVariant max = 0);
    ComplexChromosome(QVariant min, QVariant max);
    /**
      * Copy constructor
      * @param other ComplexChromosome to copy
      */
    ComplexChromosome(const ComplexChromosome &other);
    /**
      * Destructor
      */
    virtual ~ComplexChromosome();

    virtual void setRandom();
    virtual void crossOver(const Chromosome& partner);
    virtual void mutate(int index);

    virtual bool operator==(const Chromosome& other) const;

    virtual QVariant at(int index) const;
    virtual QVariant data() const;
    virtual int size() const;

protected:
    virtual QVariant getRandomValue() const = 0;

    QList<QVariant> geneArray;
    QVariant minValue;
    QVariant maxValue;
private:

};

#endif /*COMPLEXCHROMOSOME_H_*/
